SpringBoot导出Word方式一:根据Word模板动态生成word(Poi 您所在的位置:网站首页 springboot 模板下载 SpringBoot导出Word方式一:根据Word模板动态生成word(Poi

SpringBoot导出Word方式一:根据Word模板动态生成word(Poi

2023-07-31 15:12| 来源: 网络整理| 查看: 265

SpringBoot 项目使用poi-tl实现导出word功能: 获取数据录入到固定的word模板,最后生成新的word文档。

Poi-tl官方文档:http://deepoove.com/poi-tl/

一、需求

根据word模板,动态填充模板内容,生成新的word。

二、poi-tl介绍

poi-tl(poi template language)是Word模板引擎,基于Microsoft Word模板和数据生成新的文档。 Apache POI不仅在上层封装了易用的文档API(文本、图片、表格、页眉、页脚、图表等),也可以在底层直接操作文档XML结构,poi-tl正是一个基于Apache POI的Word模板引擎,并且拥有着让人喜悦的特性。

poi-tl语法:

总共就5种语法:

1.文本模板{{var}} 渲染为 TextRenderData 或 String 数据模型

2.图片模板{{@photo}} 渲染为 PictureRenderData 数据模型

3.表格模板{{#var}} 渲染数据模型是 MiniTableRenderData

4.列表模板{{*var}} 渲染为 NumbericRenderData 数据模型

5.文档模板{{+var}} 渲染为 DocxRenderData 数据模型

poi-tl的优点

根据官方文档介绍,poi-tl具有以下优点: A、支持动态填充文本、图片、表格、列表、文档 B、支持DOCX格式,所有的模板标签都是以 {{ 开头,以 }}结尾,模板标签可以出现在任何非文本框的位置,包括页眉,页脚,表格内部等等。 C、poi-tl的一个核心特点是数据模型与样式的分离,同样的数据模型可以用来渲染各种不同样式的模板。 D、文档的样式继承模板标签的样式,即如果模板{{title}}是蓝色微软雅黑加粗四号字体,则替换后的文本也是蓝色微软雅黑加粗四号字体。

二、具体应用

1.添加必要依赖

com.deepoove poi-tl 1.5.0 javax.servlet javax.servlet-api org.apache.tomcat.embed tomcat-embed-jasper javax.servlet jstl

2.创建word工具类

package com.example.mimiprogram.common; import com.deepoove.poi.XWPFTemplate; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServletRequest; /** * word工具类 * Poi-tl模板引擎官方文档:http://deepoove.com/poi-tl/ */ public class WordUtil { /** * 根据模板填充内容生成word,并下载 * @param templatePath word模板文件路径 * @param paramMap 替换的参数集合 */ public static void downloadWord(OutputStream out,String templatePath, Map paramMap) { Long time = new Date().getTime(); // 生成的word格式 String formatSuffix = ".docx"; // 拼接后的文件名 String fileName = time + formatSuffix; //设置生成的文件存放路径,可以存放在你想要指定的路径里面 String rootPath="D:/mimi/"+File.separator+"file/word/"; String filePath = rootPath+fileName; File newFile = new File(filePath); //判断目标文件所在目录是否存在 if(!newFile.getParentFile().exists()){ //如果目标文件所在的目录不存在,则创建父目录 newFile.getParentFile().mkdirs(); } // 读取模板templatePath并将paramMap的内容填充进模板,即编辑模板(compile)+渲染数据(render) XWPFTemplate template = XWPFTemplate.compile(templatePath).render(paramMap); try { //out = new FileOutputStream(filePath);//输出路径(下载到指定路径) // 将填充之后的模板写入filePath template.write(out);//将template写到OutputStream中 out.flush(); out.close(); template.close(); } catch (Exception e) { e.printStackTrace(); } } }

3.新建一个word,编写word模板:

在这里插入图片描述 4.编写一个controller 类,导出员工信息的接口类,供页面请求

package com.example.mimiprogram.controller; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * 导出Word * @author Administrator * */ @RequestMapping("/auth/exportWord/") @RestController public class ExportWordController { /** * 用户信息导出word * @throws IOException */ @RequestMapping("/exportUserWord") public void exportUserWord(HttpServletRequest request,HttpServletResponse response) throws IOException{ response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=" +new SimpleDateFormat("yyyyMMddHHmm").format(new Date())+".docx"); Map params = new HashMap(); // 渲染文本 params.put("name", "张三"); params.put("position", "开发工程师"); params.put("entry_time", "2020-07-30"); params.put("province", "江苏省"); params.put("city", "南京市"); // 渲染图片 params.put("picture", new PictureRenderData(120, 120, "D:\\cssTest\\square.png")); // TODO 渲染其他类型的数据请参考官方文档 String templatePath = "D:\\user.docx"; WordUtil.downloadWord(response.getOutputStream(), templatePath, params); } }

需要注意的是: downloadWord方法中的一行代码:

out = new FileOutputStream(filePath);//输出路径(下载到指定路径)

exportUserWord方法中的两行代码:

//浏览器下载 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=" +new SimpleDateFormat("yyyyMMddHHmm").format(new Date())+".docx");

如果想要显示浏览器下载,exportUserWord方法中的这两行代码必须显示,而downloadWord方法中的那一行代码必须隐藏。

如果想要下载到指定的路径,exportUserWord方法中的这两行代码必须隐藏,而downloadWord方法中的那一行代码必须显示。

5.jsp部分代码:

导出 function doExport(){ window.location.href="/auth/exportWord/exportUserWord"; }

6.导出结果: 在这里插入图片描述

三、完整代码 点击此处获取



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有